<template>
  <div>
    <h1>角色列表</h1>
    <el-row>
      <el-col :span="20" :push='2'>
        <div>
          <el-form :inline="true">
            <el-form-item style="float: left" label="查询角色信息:">
              <el-input v-model="search" placeholder="查询所需要的内容......"></el-input>
            </el-form-item>
            <el-form-item style="float: right">
              <el-button type="primary" size="small" icon="el-icon-edit-outline" @click="handleAdd">添加</el-button>
            </el-form-item>
          </el-form>
        </div>
        <div class="table">
          <el-table
            :data="tables.slice((page-1)*pageSize,page*pageSize)"
            border
            style="width: 100%">
            <el-table-column
              type="index"
              label="序号"
              align="center"
              width="260">
            </el-table-column>
            <el-table-column
              label="编号"
              align="center"
              width="300">
              <template slot-scope="scope">
                <span>{{scope.row.id}}</span>
              </template>
            </el-table-column>
            <el-table-column
              label="角色代码"
              align="center"
              width="300">
              <template slot-scope="scope">
                <span>{{scope.row.code}}</span>
              </template>
            </el-table-column>
            <el-table-column label="操作" align="center" width="280">
              <template slot-scope="scope">
                <el-button
                  size="mini"
                  type="danger"
                  @click="handleDelete(scope.row)">删除</el-button>
              </template>
            </el-table-column>
          </el-table>
          <el-col :span="24" class="el-table_footstool">
            <el-pagination layout="total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-sizes="[10, 15]" :page-size="pageSize" :total="tables.length" style="float:right;">
            </el-pagination>
          </el-col>
        </div>
      </el-col>
    </el-row>
    <el-dialog
      title="添加角色"
      :visible.sync="centerDialogVisible"
      width="25%"
      center>
      <el-form :model="role" style="padding-left: 20px" ref="roleAdd">
        <el-form-item label="角色代码" :label-width="formLabelWidth">
          <el-input v-model="role.roleCode" autocomplete="off" style="width: 220px"></el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
    <el-button @click="centerDialogVisible = false">取 消</el-button>
    <el-button type="primary" @click="dialogFormAdd('roleAdd')">确 定</el-button>
  </span>
    </el-dialog>
  </div>
</template>

<script>
import roleApi from '@/api/system/role'
export default {
  data () {
    return {
      centerDialogVisible: false, // 添加角色弹窗设置初始化为隐藏
      role: {
        roleCode: '' // 角色代码
      },
      roles: [], // 角色列表
      search: '', // 搜索关键词
      page: 1, // 页号
      pageSize: 10, // 页面最大数据显示量
      formLabelWidth: 10 // 表单标签长度
    }
  },
  computed: {
    // 模糊搜索
    tables () {
      const search = this.search
      if (search) {
        // filter() 方法创建一个新的数组，新数组中的元素是通过检查指定数组中符合条件的所有元素
        return this.roles.filter(data => {
          // some() 方法用于检测数组中的元素是否满足指定条件;
          // some() 方法会依次执行数组的每个元素：
          // 如果有一个元素满足条件，则表达式返回true , 剩余的元素不会再执行检测;
          // 如果没有满足条件的元素，则返回false。
          return Object.keys(data).some(key => {
            // indexOf() 返回某个指定的字符在某个字符串中首次出现的位置，如果没有找到就返回-1；
            return String(data[key]).toLowerCase().indexOf(search) > -1
          })
        })
      }
      return this.roles
    }
  },
  /**
   * 页面创建时获取角色列表
   */
  created () {
    this.getRoleList()
  },
  methods: {
    /**
     * 通过调用api获取角色列表
     */
    getRoleList () {
      roleApi.getRoleList().then(res => {
        this.roles = res.data
      })
    },
    /**
     * 通过传角色id给api来删除角色，删除成功后更新角色列表
     * @param index 序号
     * @param row 当前行
     */
    handleDelete (row) {
      roleApi.deleteRole(row.id).then(res => {
        this.$message({
          type: 'success',
          message: '删除成功'
        })
        this.getRoleList()
        this.page = 1
      }
      )
    },
    /**
     * 添加按钮点击事件，显示添加角色弹窗
     */
    handleAdd () {
      this.centerDialogVisible = true
    },
    /**
     * 添加角色表单提交按钮点击事件，添加数据成功后隐藏弹窗并更新角色列表
     * @param roleAdd 表单名字
     */
    dialogFormAdd (roleAdd) {
      this.$refs[roleAdd].validate((valid) => {
        if (valid) {
          roleApi.addRole(this.role).then(res => {
            this.$message({
              type: 'success',
              message: '添加角色成功'
            })
            this.centerDialogVisible = false
            this.getRoleList()
          }
          )
          this.role = {brand_right: 0}
          this.$refs[roleAdd].resetFields()
        } else {
          return false
        }
      })
    },

    // 初始页page、初始每页数据数pageSize和数据data
    handleSizeChange (size) {
      this.pageSize = size
    },
    handleCurrentChange (val) {
      this.page = val
    }
  }
}
</script>

<style scoped>

</style>
